正如在前一章了解到的，编译器通常分为两部分——前端和后端。本章中，将实现一种编程语言的前端——主要处理源语言的部分。我们将学习现实世界的编译器使用的技术，并将其应用到我们的编程语言中。

旅程将从定义编程语言的语法开始，并以抽象语法树(AST)结束，其将成为代码生成的基础。对于想要实现编译器的每种编程语言，都可以使用这种方法。

本章中，将了解以下内容:

\begin{itemize}
\item
定义一个真正的编程语言，将了解tinylang语言，它是实际的编程语言的一个子集，将为它实现一个编译器前端

\item
组织编译器项目的目录结构

\item
了解如何为编译器处理多个输入文件

\item
处理用户信息并以令人愉快的方式通知他们问题的技巧

\item
使用模块化部件构建词法分析器

\item
根据从语法导出的规则构造递归下降解析器来执行语法分析

\item
执行语义分析，通过创建AST并分析其特点
\end{itemize}

有了本章的技能，读者们将能够为任何编程语言构建一个编译器前端。








